home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / latex209 / contrib / misc / steveshacks.tex (.txt) < prev    next >
LaTeX Document  |  1993-03-10  |  13KB

  1. Return-Path: <spqr@minster.york.ac.uk>
  2. Received: from minster.york.ac.uk by ftp.tex.ac.uk (4.1/SMI-4.1)
  3.     id AA04969; Tue, 9 Mar 93 09:31:49 GMT
  4. From: spqr@minster.york.ac.uk
  5. Date: Tue, 9 Mar 93 09:29:08
  6. Message-Id: <swordfish.731669420@minster.york.ac.uk>
  7. To: archive@ftp.tex.ac.uk
  8. In-Reply-To: smith@gramian.harvard.edu's message of 2 Mar 93 23:02:22 GMT
  9. Subject: Steve's LaTeX Hacks
  10. Status: RO
  11.    From: smith@gramian.harvard.edu (Steven Smith)
  12.    Newsgroups: comp.text.tex
  13.    Date: 2 Mar 93 23:02:22 GMT
  14.    Distribution: comp.text.tex
  15.    Organization: Harvard Robotics Lab, Harvard University
  16.    I recently submitted a paper to a publisher who demanded that it be in
  17.    LaTeX format.  At first I hated this.  But later, I grew to like it as
  18.    I learned to hack LaTeX to get it to do what I wanted.  I've heard
  19.    several people complain about some of the LaTeX problems that I faced,
  20.    so I've included my fixes here for people to use.
  21.    The code is arranged in three sections: (i) LaTeX bug fixes, where I
  22.    fix LaTeX so that it doesn't do things that are plain wrong, (ii) LaTeX
  23.    hacks, where I hack LaTeX to make it conform to a style that I prefer,
  24.    and (iii) useful macros from Plain TeX that for some specious reason
  25.    are not included in LaTeX.  I've also included a proof environment
  26.    that gives Halmos's tombstone.
  27.        Note to LaTeX-but-non-TeX users: I highly recommend using Plain
  28.        TeX macros like \pmatrix etc.  You will find typing
  29.            $$\pmatrix{a&b\cr c&d}$$
  30.        much faster and easier than typing
  31.            \[\left(\begin{array}{cc}a&b\\c&d\end{array}\right)\].
  32.        Most of these macros, described in Chapters 16-19 of the TeXbook,
  33.        are defined in standard LaTeX, so you may use them.
  34.    Included below are the following:
  35.    LaTeX bug fixes:
  36.    1. Fix eqnarray to delete those awful spaces around the relation.
  37.    2. Use correct 12-point math extension font.
  38.    3. Define correct 12-point \big,...,\Bigg macros.
  39.    LaTeX hacks:
  40.    1. Add 10-point bold roman subscripts.
  41.    2. Put stretchiness and new hooks in the theorem environment.
  42.    3. Add an environment for proofs.
  43.    4. Change LaTeX's \cite command for bold citations separated by thinspaces.
  44.    5. Add Plain TeX's \headline and \footline to plain pagestyle.
  45.    Plain TeX additions:
  46.    1. Add \eqalign.
  47.    2. \overfullrule=5pt (Plain TeX's setting).
  48.    The code follows.  All of this code should be placed in LaTeX's
  49.    preamble (between \documentstyle and \begin{document}).  If you only
  50.    take part of this code, be sure to surround it in your preamble with
  51.    the LaTeX commands \makeatletter and \makeatother.  And, of course, if
  52.    you don't like anything about these macros, you are free to change them.
  53.    \makeatletter
  54.    % LaTeX bug fixes:
  55.    % 1. Fix eqnarray to delete those awful spaces around the relation.
  56.    % Fix eqnarray's \def so that it uses the correct spacing (cf. latex.tex).
  57.    \def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
  58.      \global\@eqnswtrue
  59.      \global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
  60.      $$\halign to \displaywidth\bgroup\@eqnsel\hskip\@centering
  61.        $\displaystyle\tabskip\z@{##}$&\global\@eqcnt\@ne 
  62.        ${{}##{}}$&\global\@eqcnt\tw@$\displaystyle\tabskip\z@{##}$\hfil
  63.        \tabskip\@centering&\llap{##}\tabskip\z@\cr}
  64.    % 2. Use correct 12-point math extension font.
  65.    % Use correct 12-point fonts (cf. lfonts.tex).
  66.    \font\twlex=cmex10 at 12pt
  67.    \font\eightex=cmex8
  68.    \font\eightbf=cmbx8
  69.    \font\sixbf=cmbx6
  70.    \def\xiipt{\textfont\z@\twlrm
  71.      \scriptfont\z@\egtrm \scriptscriptfont\z@\sixrm
  72.    \textfont\@ne\twlmi \scriptfont\@ne\egtmi \scriptscriptfont\@ne\sixmi
  73.    \textfont\tw@\twlsy \scriptfont\tw@\egtsy \scriptscriptfont\tw@\sixsy
  74.    \textfont\thr@@\twlex \scriptfont\thr@@\eightex \scriptscriptfont\thr@@\eightex
  75.    \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
  76.          \textfont\@ne\twlmi
  77.          \textfont\tw@\twlsy \textfont\lyfam\twlly
  78.          \@boldfalse}\@boldfalse
  79.    \def\boldmath{\@ifundefined{twlmib}{\global\font\twlmib\@mbi\@magscale1\global
  80.        \font\twlsyb\@mbsy \@magscale1\global\font
  81.         \twllyb\@lasyb\@magscale1\relax\@addfontinfo\@xiipt
  82.          {\def\boldmath{\everymath
  83.            {\mit}\everydisplay{\mit}\@prtct\@nomathbold
  84.            \textfont\@ne\twlmib \textfont\tw@\twlsyb
  85.            \textfont\lyfam\twllyb\@prtct\@boldtrue}}}{}\@xiipt\boldmath}%
  86.    \def\prm{\fam\z@\twlrm}%
  87.    \def\pit{\fam\itfam\twlit}\textfont\itfam\twlit \scriptfont\itfam\egtit
  88.       \scriptscriptfont\itfam\sevit
  89.    \def\psl{\fam\slfam\twlsl}\textfont\slfam\twlsl
  90.     \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
  91.    \def\pbf{\fam\bffam\twlbf}\textfont\bffam\twlbf
  92.       \scriptfont\bffam\eightbf \scriptscriptfont\bffam\sixbf
  93.    \def\ptt{\fam\ttfam\twltt}\textfont\ttfam\twltt
  94.       \scriptfont\ttfam\nintt \scriptscriptfont\ttfam\nintt
  95.    \def\psf{\fam\sffam\twlsf}\textfont\sffam\twlsf
  96.        \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
  97.    \def\psc{\@getfont\psc\scfam\@xiipt{\@mcsc\@magscale1}}%
  98.    \def\ly{\fam\lyfam\twlly}\textfont\lyfam\twlly
  99.       \scriptfont\lyfam\egtly \scriptscriptfont\lyfam\sixly
  100.     \@setstrut \rm}
  101.    % 3. Define correct 12-point \big,...,\Bigg macros (cf. lplain.tex).
  102.    \def\big#1{{\hbox{$\left#1\vbox to10\p@{}\right.\n@space$}}}
  103.    \def\Big#1{{\hbox{$\left#1\vbox to13\p@{}\right.\n@space$}}}%
  104.    \def\bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}}%
  105.    \def\Bigg#1{{\hbox{$\left#1\vbox to21\p@{}\right.\n@space$}}}%
  106.    % LaTeX hacks:
  107.    % 1. Add 10-point bold roman subscripts.
  108.    % Use correct 10-point bold subscript fonts like Plain TeX (cf. lfonts.tex).
  109.    \font\eightex=cmex8
  110.    \font\sevenbf=cmbx7
  111.    \font\fivebf=cmbx5
  112.    \def\xpt{\textfont\z@\tenrm
  113.      \scriptfont\z@\sevrm \scriptscriptfont\z@\fivrm
  114.    \textfont\@ne\tenmi \scriptfont\@ne\sevmi \scriptscriptfont\@ne\fivmi
  115.    \textfont\tw@\tensy \scriptfont\tw@\sevsy \scriptscriptfont\tw@\fivsy
  116.    \textfont\thr@@\tenex \scriptfont\thr@@\eightex \scriptscriptfont\thr@@\eightex
  117.    \def\unboldmath{\everymath{}\everydisplay{}\@nomath\unboldmath
  118.          \textfont\@ne\tenmi
  119.          \textfont\tw@\tensy \textfont\lyfam\tenly
  120.          \@boldfalse}\@boldfalse
  121.    \def\boldmath{\@ifundefined{tenmib}{\global\font\tenmib\@mbi
  122.       \global\font\tensyb\@mbsy
  123.       \global\font\tenlyb\@lasyb\relax\@addfontinfo\@xpt
  124.       {\def\boldmath{\everymath{\mit}\everydisplay{\mit}\@prtct\@nomathbold
  125.        \textfont\@ne\tenmib \textfont\tw@\tensyb
  126.        \textfont\lyfam\tenlyb \@prtct\@boldtrue}}}{}\@xpt\boldmath}%
  127.    \def\prm{\fam\z@\tenrm}%
  128.    \def\pit{\fam\itfam\tenit}\textfont\itfam\tenit \scriptfont\itfam\sevit
  129.        \scriptscriptfont\itfam\sevit
  130.    \def\psl{\fam\slfam\tensl}\textfont\slfam\tensl
  131.     \scriptfont\slfam\tensl \scriptscriptfont\slfam\tensl
  132.    \def\pbf{\fam\bffam\tenbf}\textfont\bffam\tenbf
  133.        \scriptfont\bffam\sevenbf \scriptscriptfont\bffam\fivebf
  134.    \def\ptt{\fam\ttfam\tentt}\textfont\ttfam\tentt
  135.        \scriptfont\ttfam\tentt \scriptscriptfont\ttfam\tentt
  136.    \def\psf{\fam\sffam\tensf}\textfont\sffam\tensf
  137.        \scriptfont\sffam\tensf \scriptscriptfont\sffam\tensf
  138.    \def\psc{\@getfont\psc\scfam\@xpt{\@mcsc}}%
  139.    \def\ly{\fam\lyfam\tenly}\textfont\lyfam\tenly
  140.       \scriptfont\lyfam\sevly \scriptscriptfont\lyfam\fivly
  141.    \@setstrut \rm}
  142.    % 2. Put stretchiness and new hooks in the theorem environment.
  143.    \def\thmstretch{plus.5em minus.1em }
  144.    \def\thmskip{0pt \thmstretch}
  145.    \def\thmstart{\hskip\thmskip\ignorespaces}
  146.    \let\thmtextfont=\it
  147.    \newif\ifthmtitle \thmtitletrue  % If TRUE, print text (e.g., ``Theorem'').
  148.    % Macros for paper's structure:
  149.    % These are utility macros:
  150.    \newtheorem{THEOREM}{Theorem}[section]
  151.    \newtheorem{PROPOSITION}[THEOREM]{Proposition}
  152.    \newtheorem{DEFINITION}[THEOREM]{Definition}
  153.    \newtheorem{LEMMA}[THEOREM]{Lemma}
  154.    \newtheorem{COROLLARY}[THEOREM]{Corollary}
  155.    \newtheorem{EXAMPLE}[THEOREM]{Example}
  156.    \newtheorem{REMARK}[THEOREM]{Remark}
  157.    \newtheorem{REMARKS}[THEOREM]{Remarks}
  158.    \newtheorem{DISCUSSION}[THEOREM]{}
  159.    \newtheorem{ALGORITHM}[THEOREM]{Algorithm}
  160.    \newtheorem{PROBLEM}[THEOREM]{Problem}
  161.    % Use these environments for their stated purpose.
  162.    \newenvironment{theorem}%
  163.      {\let\thmtextfont=\it \thmtitletrue \begin{THEOREM}}%
  164.    {\end{THEOREM}}
  165.    \newenvironment{proposition}%
  166.      {\let\thmtextfont=\it \thmtitletrue \begin{PROPOSITION}}%
  167.      {\end{PROPOSITION}}
  168.    \newenvironment{definition}%
  169.      {\let\thmtextfont=\rm \thmtitletrue \begin{DEFINITION}}%
  170.      {\end{DEFINITION}}
  171.    \newenvironment{lemma}%
  172.      {\let\thmtextfont=\it \thmtitletrue \begin{LEMMA}}%
  173.      {\end{LEMMA}}
  174.    \newenvironment{corollary}%
  175.      {\let\thmtextfont=\it \thmtitletrue \begin{COROLLARY}}%
  176.      {\end{COROLLARY}}
  177.    \newenvironment{example}%
  178.      {\let\thmtextfont=\rm \thmtitletrue \begin{EXAMPLE}}%
  179.      {\end{EXAMPLE}}
  180.    \newenvironment{remark}%
  181.      {\let\thmtextfont=\rm \thmtitletrue \begin{REMARK}}%
  182.      {\end{REMARK}}
  183.    \newenvironment{remarks}%
  184.      {\let\thmtextfont=\rm \thmtitletrue \begin{REMARKS}}%
  185.      {\end{REMARKS}}
  186.    \newenvironment{discussion}%
  187.      {\let\thmtextfont=\rm \thmtitlefalse \begin{DISCUSSION}}%
  188.      {\end{DISCUSSION}}
  189.    \newenvironment{algorithm}%
  190.      {\let\thmtextfont=\rm \thmtitletrue \begin{ALGORITHM}}%
  191.      {\end{ALGORITHM}}
  192.    \newenvironment{problem}%
  193.      {\let\thmtextfont=\rm \thmtitletrue \begin{PROBLEM}}%
  194.      {\end{PROBLEM}}
  195.    \newenvironment{steps}{\begin{description}}{\end{description}}
  196.    \def\step[#1]{\item[\rm{\it Step\/}~#1]}
  197.    % Change LaTeX's theorem format somewhat (cf. latex.tex)
  198.    \def\@begintheorem#1#2{\thmtextfont \trivlist \ifthmtitle
  199.      \item[\hskip \labelsep{\bf #1\ #2.}]\else
  200.      \item[\hskip \labelsep{\bf #2.}]\fi\thmstart}
  201.    \def\@opargbegintheorem#1#2#3{\thmtextfont \trivlist
  202.      \item[\hskip\labelsep{\bf #1\ #2\ {\rm(#3)}.}]\thmstart}
  203.    % 3. Add an environment for proofs.
  204.    % Proof environment with Halmos's tombstone
  205.    \newif\ifmathtomb \mathtombfalse
  206.    %\def\tombstone{\unskip\penalty50  % Tombstone breaks to left margin.
  207.    %  \enskip \vrule width.3333em height.7em depth.2em
  208.    %  \ifmmode \global\mathtombtrue \else \global\mathtombfalse \fi}
  209.    \def\tombstone{\unskip\penalty50   % Tombstone breaks to right margin.
  210.      \hskip 0pt plus-1fill \null\nobreak\hskip 0pt plus1fill
  211.      \enskip \vrule width.3333em height.7em depth.2em
  212.      \ifmmode \global\mathtombtrue \else \global\mathtombfalse \fi}
  213.                       % Tombstone scores!
  214.    \newenvironment{proof}% Use \tombstone explicitly in display math
  215.      {\futurelet\next\pr@oftext}% Optional argument for proof text.
  216.      {\ifmathtomb \else \tombstone \fi \par
  217.       \ifmathtomb \else \addvspace{\medskipamount}\fi \global\mathtombfalse}
  218.    \def\pr@oftext{\ifx\next[\let\temp\opr@@ftext\else\let\temp\pr@@ftext\fi\temp}
  219.    \def\pr@@ftext{\beginpr@@f{Proof}}
  220.    \def\opr@@ftext[#1]{\beginpr@@f{#1}}
  221.    \def\beginpr@@f#1{\par \addvspace{\bigskipamount}\widowpenalty=10000
  222.      \noindent{\bf #1.}\hskip\labelsep\thmstretch   % No widow lines in proofs.
  223.      \ignorespaces}
  224.    % The text will be ``Proof'' unless an optional argument [] is used.
  225.    % The syntax should be TeX-equivalent to one of the following:
  226.    % 
  227.    %         \begin{proof} Text. \end{proof}
  228.    %         \begin{proof} Text $$math.\tombstone$$ \end{proof}
  229.    % 4. Change LaTeX's \cite command for bold citations separated by thinspaces.
  230.    \def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
  231.      \def\@citea{}\@cite{\@for\@citeb:=#2\do
  232.        {\@citea\def\@citea{,\penalty\@m\thinspace }\@ifundefined
  233.       {b@\@citeb}{{\bf ?}\@warning
  234.       {Citation `\@citeb' on page \thepage \space undefined}}%
  235.    \hbox{\bf\csname b@\@citeb\endcsname}}}{#1}}
  236.    %\hbox{\small\bf\csname b@\@citeb\endcsname}}}{#1}} % Give \small citation #'s.
  237.    % 5. Add Plain TeX's \headline and \footline to plain pagestyle.
  238.    \newtoks\headline \headline={\hfil} % headline is normally blank
  239.    \newtoks\footline \footline={\hss\rm\thepage\hss}
  240.      % footline is normally a centered page number in font \tenrm
  241.    % Change \ps@plain to include running headline information (cf. latex.tex).
  242.    \def\ps@plain{\let\@mkboth\@gobbletwo
  243.      \def\@oddhead{\the\headline}\let\@evenhead\@oddhead
  244.      \def\@oddfoot{\the\footline}\let\@evenfoot\@oddfoot}
  245.      % Odd and even cases are lumped into one macro as in Plain TeX.
  246.    \pagestyle{plain}  % Run \pagestyle to incorporate changes.
  247.    % Plain TeX additions:
  248.    % 1. Add \eqalign.
  249.    \def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
  250.      \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
  251.      \crcr#1\crcr}}\,}
  252.    % 2. \overfullrule=5pt (Plain TeX's setting).
  253.    \overfullrule=5pt  % Plain TeX's setting
  254.    \makeatother
  255.